package com.example.lib_common.livedata_eventbus

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import java.util.concurrent.atomic.AtomicBoolean

class SingleLiveEvent<T> : MutableLiveData<T>() {
    private val pending = AtomicBoolean(false)

    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
        super.observe(owner) { value ->
            if (pending.compareAndSet(true, false)) { // 确保只消费一次
                observer.onChanged(value)
            }
        }
    }

    override fun setValue(value: T) {
        pending.set(true)
        super.setValue(value)
    }
}
//具体使用场景：
//无论屏幕如何旋转，Toast 只会显示一次，不会因数据倒灌重复触发。

//// 1. 定义 SingleLiveEvent（通常在 ViewModel 中）
//class MyViewModel : ViewModel() {
//    private val _showToastEvent = SingleLiveEvent<String>()
//    val showToastEvent: LiveData<String> = _showToastEvent
//
//    fun triggerToast(message: String) {
//        _showToastEvent.value = message
//    }
//}

// 2. 在 Activity/Fragment 中观察
//class MyActivity : AppCompatActivity() {
//    private val viewModel by viewModels<MyViewModel>()
//
//    override fun onCreate(savedInstanceState: Bundle?) {
//        super.onCreate(savedInstanceState)
//        setContentView(R.layout.activity_main)
//
//        // 观察事件
//        viewModel.showToastEvent.observe(this) { message ->
//            Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
//        }
//
//        // 触发事件（例如按钮点击）
//        findViewById<Button>(R.id.btn_show_toast).setOnClickListener {
//            viewModel.triggerToast("Hello, SingleLiveEvent!")
//        }
//    }
//}